package com.ziroom.crm.mq.core.retry;

/**
 * 重试执行器
 * <p/>
 *
 * @author WeiShaoying
 * @date Created in 2020年09月10日 17:37
 * @since 1.0.0
 */
public interface RetryHandler {

    /**
     * 内存不断重试 retryFunction, 直到条件结束
     * 重试->捕获异常->异常处理（延时）->重试
     *
     * @param retryFunction 重试方法, not null
     * @param retryContext  重试内容， not null
     */
    void retry(RetryFunction retryFunction, RetryContext retryContext);

    /**
     * 跳过重试，仅处理异常（延时）部分逻辑
     *
     * @param retryContext 重试内容
     * @param e            异常
     */
    void handleException(RetryContext retryContext, Exception e);

}
